package com.itheima.package3_atom.AtomicInteger;

import java.util.concurrent.atomic.AtomicInteger;
/*
    CAS算法
        先比较后修改

        1、线程将共享数据获取到自己的线程栈
        2、对数据进行修改
        3、赋值回去
            比较一下，共享数据是不是发生了改变
                如果没变，说明没有其他线程操作，修改成功
                如果改变，说明有其他线程操作了数据，修改失败
                    重新获取最新的数据，再次修改（自旋的过程）

    synchronized和CAS的区别
    synchronized总是从最坏的角度出发，认为任何人都有可能修改，所以每次操作之前都会上锁
    CAS算法：乐观锁
 */
public class MyAtomicInteger implements Runnable {
    //private  int count = 0;
    AtomicInteger ai = new AtomicInteger(0);
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            //synchronized (this){
            //ai自增的原子操作
            int count = ai.incrementAndGet();
            System.out.println("已经送了"+count+"个冰淇淋");
        }
    }
}
